// 导入数据库操作模块
const db = require('../db/index.js')

// 导入bcrypt.js
const bcrypt = require('bcryptjs')

//导入生成Token的包
const jwt = require('jsonwebtoken')

// 导入全局的配置文件
const config = require('../config.js')

// 登录的处理函数
exports.login = (req,res)=>{
  // 接收表单的数据
  const userinfo = req.body
  // 定义sql语句
  const sql = 'SELECT * FROM login WHERE username=?'
  // 执行sql语句 根据用户名在数据库查询用户的信息
  db.query(sql,userinfo.username,(err,result)=>{
    // 执行sql语句失败
    if(err) return res.cc(err)
    // 执行sql语句成功 但是获取到的数据的条数不等于1 
    // 说明没有这个username 
     if(result.length !==1) return res.cc('登陆失败')
    // Todo 去判断密码是否和数据库的保持一致
    // 拿着用户输入的密码 和数据库中存储的密码进行对比  
    // bcrypt.compareSync 处理的密码必须进行加密才可进行比较
    const compareResult = bcrypt.compareSync(userinfo.password, result[0].password)
    // 如果对比的结果等于false，证明用户输入的密码错误
    if(!compareResult) return res.cc('密码错误，请重新输入')
    // Todo：在服务器端生成Token的字符串
    const user = { ...result[0], username:''}
    // 对用户信息进行加密 生成Token字符串
    const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn: config.expiresIn})
    // 调用res.send()方法将Token响应给客户端
    // 为了方便客户端使用 Token 在服务器直接拼接上expiresIn
    res.send({ code:200, msg:'登陆成功！', data:{token: 'Bearer '+tokenStr} })
  })
}